if... then... or... Assembler

← Zurück zum Forum

Ich habe gerade folgende Logik in Assembler:

wenn a=10 oder b=10 oder c=10 oder d=10 dann f=111

In Assembler habe ich eine Anweisungsstruktur dafür, die 78 Bytes braucht... das geht doch sicherlich deutlich kürzer und schneller... wer hat kreative Ideen??

AntwortZitat

Hallo!

Also da käme mir folgendes in den Sinn...

          LDA #10                ; Mit 10 vergleichen
          CMP VarA
          BEQ true                ; Wenn A = 10 dann true
          CMP VarB
          BEQ true                ; Wenn B = 10 dann true
          CMP VarC
          BEQ true                ; Wenn C = 10 dann true
          CMP VarD
          BEQ true                ; Wenn D = 10 dann true
false:
          JMP Irgendwohin
true:
          LDA #111
          STA VarF
          ...

Grüße Janko

Meine Projekte findest Du hier...

AntwortZitat

Hallo! Statt jede Variable einzeln zu vergleichen, könntest du die Werte in einem Register addieren und dann prüfen, ob eine davon 10 ist, z.B. mit Subtraktion und einem Sprung bei Null. Oder du nutzt eine Schleife, die die Werte nacheinander überprüft, um Code zu sparen. Bitmasken helfen hier weniger, da Zahlenwerte verglichen werden. Ohne genauen Assemblertyp schwer zu sagen, aber meistens sind kurze Vergleiche im Register und bedingte Sprünge effizienter als lange If-Ketten.

AntwortZitat